package com.ruoyi.quartz.task;

import com.ruoyi.quartz.domain.DeviceDataTask;
import com.ruoyi.quartz.service.IUserDeviceDataTaskService;
import com.ruoyi.quartz.mapper.UserDeviceDataTaskMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;

@Component
public class UserDeviceDataTask {

    @Autowired
    private IUserDeviceDataTaskService userDeviceDataTaskService;

    @Autowired
    private UserDeviceDataTaskMapper userDeviceDataTaskMapper;

    // 每秒执行一次
    @Scheduled(fixedRate = 3600000)
    public void generateUserDeviceData() {
        // 获取所有用户
        List<DeviceDataTask> users = userDeviceDataTaskMapper.getAllUsers();
        LocalDate today = LocalDate.now();

        for (DeviceDataTask user : users) {
            if (user.getUserId() == null) {
                continue;  // 跳过无效用户
            }

            // 获取该用户的设备列表
            List<DeviceDataTask> userDevices = userDeviceDataTaskMapper.getDevicesForUser(user.getUserId());

            // 确保该用户有设备
            if (userDevices.isEmpty()) {
                continue;  // 如果没有设备，跳过该用户
            }

            // 选择第一个设备，或根据业务逻辑选择一个设备
            Long deviceId = userDevices.get(0).getDeviceId();  // 假设选择第一个设备

            DeviceDataTask data = new DeviceDataTask();

            // 保持已有的字段数据
            data.setUserId(user.getUserId());
            data.setFullName(user.getFullName());
            data.setSex(user.getSex());
            data.setAge(user.getAge());
            data.setHeight(user.getHeight());
            data.setWeight(user.getWeight());
            data.setBmi(user.getBmi());

            // 随机生成数据
            Random random = new Random();

            // 步数生成规则
            Integer lastMaxSteps = userDeviceDataTaskMapper.getMaxStepsForToday(user.getUserId());
            int newSteps = lastMaxSteps + random.nextInt(100) + 1;
            data.setSteps(newSteps);

            // 随机生成其他数据
            data.setSleepDuration(4 + random.nextDouble() * 6);
            data.setSleepQuality(data.getSleepDuration() > 8 ? "good" : (data.getSleepDuration() < 6 ? "fair" : "normal"));
            data.setHeartRate(40 + random.nextInt(80));
            data.setActiveMinutes(random.nextInt(120));
            data.setBloodPressureSystolic(80 + random.nextInt(50));
            data.setBloodPressureDiastolic(60 + random.nextInt(40));
            data.setBloodOxygen((double) (80 + random.nextInt(20)));

            // 设置设备ID
            data.setDeviceId(deviceId);

            // 设置当前时间
            data.setDate(LocalDateTime.now());

            // 保存数据到数据库
            userDeviceDataTaskService.insertUserDeviceData(data);
        }
//    @Scheduled(fixedRate = 3600000)
//    public void generateUserDeviceData() {
//        // 获取所有用户
//        List<DeviceDataTask> users = userDeviceDataTaskMapper.getAllUsers();
//        LocalDate today = LocalDate.now();
//
//        for (DeviceDataTask user : users) {
//            if (user.getUserId() == null) {
//                continue;  // 跳过无效用户
//            }
//            DeviceDataTask data = new DeviceDataTask();
//
//            // 保持已有的字段数据
//            data.setUserId(user.getUserId());
//            data.setFullName(user.getFullName());
//            data.setSex(user.getSex());
//            data.setAge(user.getAge());
//            data.setHeight(user.getHeight());
//            data.setWeight(user.getWeight());
//            data.setBmi(user.getBmi());
//
//            Random random = new Random();
//
//            // 获取今天该用户的最大步数
//            Integer lastMaxSteps = userDeviceDataTaskMapper.getMaxStepsForToday(user.getUserId());
//
//            // 步数生成规则：当天步数必须大于等于前一次生成的步数，且不超过前一次生成的步数 + 100
//            int newSteps = lastMaxSteps + random.nextInt(100) + 1;
//
//            // 设置新的步数
//            data.setSteps(newSteps);
//
//            // 随机生成睡眠时间（4到10小时之间）
//            double sleepDuration = 4 + random.nextDouble() * 6;
//            data.setSleepDuration(sleepDuration);
//
//            // 根据睡眠时间设置睡眠质量
//            if (sleepDuration > 8) {
//                data.setSleepQuality("good");
//            } else if (sleepDuration < 6) {
//                data.setSleepQuality("fair");
//            } else {
//                data.setSleepQuality("normal");
//            }
//
//            // 随机生成心率（40到120之间）
//            data.setHeartRate(40 + random.nextInt(80));
//
//            // 随机生成运动时长（0到120分钟之间）
//            data.setActiveMinutes(0 + random.nextInt(120));
//
//            // 随机生成血压收缩压和舒张压
//            data.setBloodPressureSystolic(80 + random.nextInt(50));
//            data.setBloodPressureDiastolic(60 + random.nextInt(40));
//
//            // 随机生成血氧（80到100之间）
//            data.setBloodOxygen((double) (80 + random.nextInt(20)));
//
//            // 设置当前时间
//            data.setDate(LocalDateTime.now());
//
//            // 保存数据到数据库
//            userDeviceDataTaskService.insertUserDeviceData(data);
//        }
    }
}
